package middleware

import (
	"context"
	"github.com/gin-gonic/gin"
	"time"
)

func ContextTimeout(t time.Duration) func(ctx *gin.Context) {
	return func(c *gin.Context) {
		//WithTimeout 设置当前 context 的超时时间，并将其重新赋值给 gin.Context
		//当当前请求运行到指定的时间后，使用了该 context 的运行流程就会对 context 提供的超时时间进行处理，并在指定的时间内取消请求
		ctx, cancel := context.WithTimeout(c.Request.Context(), t)
		defer cancel()
		c.Request = c.Request.WithContext(ctx)
		c.Next()
	}
}
